﻿using System;
using System.Collections.Generic;
using Sebrae.Academico.InfraEstrutura.Core;
using Sebrae.Academico.InfraEstrutura.Core.UnitOfWork;
using Sebrae.Academico.Trilhas.Dominio.Classes;

namespace Sebrae.Academico.Trilhas.BM.Classes
{
    public class BMNivelOcupacional : BusinessManagerBase
    {
        #region Atributos

        private RepositorioBase<NivelOcupacional> repositorio = null;

        #endregion

        #region Construtor

        public BMNivelOcupacional(IUnitOfWork unitOfWork)
        {
            repositorio = new RepositorioBase<NivelOcupacional>(unitOfWork);
        }

        #endregion

        public void Incluir(NivelOcupacional pNivelOcupacional)
        {
            repositorio.Salvar(pNivelOcupacional);
        }

        public void Alterar(NivelOcupacional pNivelOcupacional)
        {
            repositorio.Salvar(pNivelOcupacional);
        }

        public IList<NivelOcupacional> ObterTodos()
        {
            return repositorio.ObterTodos();
        }

        public NivelOcupacional ObterPorID(int pId)
        {
            return repositorio.ObterPorID(pId);
        }

        public IList<NivelOcupacional> ObterPorNome(string pNome)
        {
            return repositorio.LikeByProperty("Nome", pNome);
        }

        /// <summary>
        /// Validação das informações de um Nivel Ocupacional.
        /// </summary>
        /// <param name="pNivelOcupacional"></param>
        public void ValidarNivelOcupacionalInformado(NivelOcupacional pNivelOcupacional)
        {
            ValidarInstancia(pNivelOcupacional);

            if (string.IsNullOrWhiteSpace(pNivelOcupacional.Nome)) throw new Exception("Informe o Nome. Campo Obrigatório");
        }

        public void Excluir(NivelOcupacional pNivelOcupacional)
        {
            if (this.ValidarDependencias(pNivelOcupacional))
                throw new Exception("Exclusão de registro negada. Existem Regisros Dependentes deste Nível Ocupacional.");

            repositorio.Excluir(pNivelOcupacional);
        }

        protected override bool ValidarDependencias(object pParametro)
        {
            NivelOcupacional nivelOcupacional = (NivelOcupacional)pParametro;
            return (nivelOcupacional.ListaUsuarios != null && nivelOcupacional.ListaUsuarios.Count > 0);
        }

    }
}
